<?php

namespace app\common\util;

use app\common\model\Config;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\QrCode;

/**
 * 二维码业务 工具类
 */
class QrCodeUtil
{
    /**
     * 生成图片文件
     * @param string $code 编码内容
     * @param string $prefix 文件前缀
     * @param float|int $size 二维码尺寸
     * @return \stdClass
     */
    public static function createImg(string $code, string $prefix = 'code', float|int $size = 300): \stdClass
    {
        $date = date('Ymd');
        $fileCode = md5($code . date('YmdHis'));
        $fileName = $prefix . '_' . $fileCode . '.png';
        $dir = public_path("qr_code/" . $prefix . "/" . $date);
        $path = $dir . $fileName;
        $path = str_replace("\\", "/", $path);
        if (!file_exists($dir)) {
            mkdir($dir, 0777, true);
            chmod($dir, 0777);
        }

        $qrCode = new QrCode();
        $qrCode->setText($code);//设置二维码上的内容
        $qrCode->setSize($size);//二维码尺寸
        $qrCode->setWriterByName('png');//设置输出的二维码图片格式
        $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH());//设置二维码的纠错率，可以有low、medium、quartile、hign多个纠错率
        //$qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]); //设置二维码的rgb颜色和透明度a，这里是黑色
        //$qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]); //设置二维码图片的背景底色，这里是白色
        $qrCode->writeFile($path);

        $url = request()->domain() . getVirRootDir() . "/qr_code/" . $prefix . "/" . $date . "/" . $fileName;

        $res = new \stdClass();
        $res->code = $code;
        $res->path = $path;//本地路径
        $res->url = $url;//访问路径
        $res->size = $size;
        return $res;
    }
}
